package _8_IO._1_File对象;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class _1_FileTest {

    /**
     * 构造File对象
     */
    @Test
    public void fileTest(){
        //Mac or Linux
//        String pathname = "/Users/doug/Development/apache-jmeter-5.2.ReaderTest/bin";
        //Windows
        String pathname = "C:\\Windows\\notepad.exe";
        File file = new File(pathname);
        System.out.println(file);//  /Users/doug/Development/apache-jmeter-5.2.ReaderTest/bin
    }

    /**
     *
     * 相对路径
     *
     * 假设当前目录是C:\Docs
     *
     * 可以用.表示当前目录，..表示上级目录。
     */
    @Test
    public void relativePath(){
        File f1 = new File("sub\\javac"); // 绝对路径是C:\Docs\sub\javac
        File f2 = new File(".\\sub\\javac"); // 绝对路径是C:\Docs\sub\javac
        File f3 = new File("..\\sub\\javac"); // 绝对路径是C:\sub\javac
    }

    /**
     * File对象有3种形式表示的路径，
     * 一种是getPath()，返回构造方法传入的路径，
     * 一种是getAbsolutePath()，返回绝对路径，
     * 一种是getCanonicalPath，它和绝对路径类似，但是返回的是规范路径。
     *
     * @throws IOException
     */
    @Test
    public void filePathTest() throws IOException {
        String pathname = "..";
        File file = new File(pathname);

        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());

    }


    @Test
    public void fileSeparatorTest(){
        System.out.println(File.separator);
    }

    //-----------------------------------
    //  文件和目录
    //-----------------------------------

    /**
     * isFile()  isDirectory()
     */
    @Test
    public void fileIsFileOrDirectoryTest(){
        String filePath1 = "/Users/doug/jby.txt";
        File file1 = new File(filePath1);
        System.out.println(file1.isFile());//判断文件是否存在
        System.out.println(file1.isDirectory());//判断给File对象是否是一个已存在的目录

        String filePath2 = "/Users/doug";
        File file2 = new File(filePath2);
        System.out.println(file2.isFile());
        System.out.println(file2.isDirectory());
    }

    //-----------------------------------
    //  创建和删除文件
    //-----------------------------------

    /**
     * createNewFile()   delete()
     */
    @Test
    public void createFileAndDelete() throws IOException{
        File file = new File("/Users/doug/doug.txt");
        if(file.createNewFile()){
            System.out.println("文件创建成功");
        }
        if(file.exists()){
           if(file.delete()){
               System.out.println("文件已删除成功");
           }
        }
    }

    /**
     * 创建临时文件
     */
    @Test
    public void createTempFileTest() throws IOException{
        File file = File.createTempFile("tmp-",".txt");
        file.deleteOnExit();
        System.out.println(file.isFile());
        System.out.println(file.getAbsolutePath());
    }

    //-----------------------------------
    //  遍历文件和目录
    //-----------------------------------

    /**
     *
     */
    @Test
    public void listFileTest(){
        String pathName = "C://Windows";
        File file = new File(pathName);
        File[] fileArray = file.listFiles();//列出所有文件和子目录
        for (File f:fileArray) {
            System.out.println(f);
        }
    }

    @Test
    public void listFileTest2(){
        String pathString = "C://Windows";
        File file = new File(pathString);
        File[] fileArray = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".exe");//返回true表示接受该文件
            }
        });
        for (File f:fileArray
             ) {
            System.out.println(f);
        }
    }

    //-----------------------------------
    //  Path
    //-----------------------------------






}
